fix(orchestrator): create /dev/fuse for dockerd; runner parity refinements - #164
Merged
Merged
Conversation
…ments Follow-ups to the conformance campaign fixes (PR #151): - docker: the krunfw guest kernel has fuse built in, but /dev boots as a plain tmpfs with no device nodes, so fuse-overlayfs (dockerd's fallback when its overlay probe fails) dies with 'fuse: device not found'. The hook now creates /dev/fuse when the kernel lists fuse, letting dockerd auto-pick fuse-overlayfs (CoW) — on this kernel dockerd's overlay2 probe mount gets EINVAL and overlay2 is never viable, so the earlier fix was falling back to vfs. vfs is now forced only when overlay fails AND fuse is absent. - RLIMIT_NOFILE: 524288 instead of 1048576 — systemd's built-in hard default, which is what GitHub's runner service inherits (exact parity). - guest PATH: cargo bin dir matches the runner user (/home/<user>/.cargo) instead of hardcoded /root/.cargo/bin, which the unprivileged runner cannot stat (nodejs/ci EACCES). - multiarch shim: add libsystemd0:amd64 (valkey's x86_64 tarballs link libsystemd.so.0). Verified live on the golden VM: hook creates /dev/fuse, dockerd 28.0.4 reports Storage Driver: fuse-overlayfs, and hello-world runs. 61 orchestrator tests pass.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughDocker startup now enables FUSE when supported, preserves Docker’s automatic storage-driver selection when overlay or FUSE is usable, and falls back to ChangesDocker storage driver selection
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Bnjoroge1
added a commit
that referenced
this pull request
Aug 20, 2026
The equal-version branch byte-compared the installed binary against the release asset and reinstalled on any drift. That clobbered a source build from newer main: main reports the same version string as the latest tag (no bump between tag and HEAD), so a build carrying #149/#151/#164 was treated as drift and replaced with the stale release binary every hour. Embed the build commit (build.rs reads git rev-parse HEAD) and expose it in 'preloop version'. The updater now compares commits via the GitHub compare API when versions are equal: - release commit is ahead of installed (installed is an ancestor — the v0.30.2 deaf-runner case) -> reinstall - installed is at or beyond the release -> keep - diverged history (release cut from a dist commit off main, or a local build) or unverifiable (no embedded commit) -> keep; never clobber a real build on an ambiguous comparison Keeps the version-greater upgrade path and the version-less stop unchanged. Drops the byte-compare and its tests; adds decision-mapping tests for ahead/behind/identical/diverged/unknown.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #151 (the conformance campaign fixes).
/devboots as a plain tmpfs with no device nodes, so fuse-overlayfs (dockerd's fallback when its overlay probe fails) dies withfuse: device not found. The hook now creates/dev/fusewhen the kernel lists fuse, letting dockerd auto-pick fuse-overlayfs (CoW) — on this kernel dockerd's overlay2 probe mount gets EINVAL and overlay2 is never viable, so the earlier approach fell back to vfs. vfs is now forced only when overlay fails AND fuse is absent. Combined with fix(orchestrator): conformance-campaign server and runtime fixes #151'sstart_dockerd()reap +exit 1retry./dev/fuse, dockerd 28.0.4 reportsStorage Driver: fuse-overlayfs, andhello-worldruns. Orchestrator tests pass.Summary by cubic
Enable CoW storage for
dockerdon krunfw guests by creating/dev/fuseand refining driver selection. Previously the overlay probe failed and we forcedvfs; now we create/dev/fusewhen the kernel supports fuse, let Docker auto-selectfuse-overlayfs, and only forcevfswhen overlay fails and fuse is absent./dev/fusewhen/proc/filesystemslists fuse; this letsdockerdfall back tofuse-overlayfs."overlay2"when the probe succeeds; leave the driver unset and only write/etc/docker/daemon.jsonwhen overriding. When the probe fails, setvfsonly if/dev/fuseis missing.RLIMIT_NOFILE=524288, use the runner user’s~/.cargo/bininPATH, and addlibsystemd0:amd64for x86_64 Valkey binaries.Written for commit 24a7426. Summary will update on new commits.
Note
Create
/dev/fuseindocker_start_commandand let dockerd auto-select storage drivermodprobe fuse, the startup script now creates/dev/fuseviamknodwhen the kernel listsfusein/proc/filesystemsand the device is missingDRIVERis cleared instead of forcingoverlay2; on a failed probe,vfsis only forced when/dev/fuseis absent, otherwiseDRIVERis left unset so dockerd can auto-selectfuse-overlayfs/etc/docker/daemon.jsonis now written only when a storage driver is explicitly chosen, instead of alwaysdaemon.jsonwith a forced driver may now see dockerd auto-select a different storage driver when/dev/fuseexists and overlay failsMacroscope summarized 24a7426.
Summary by CodeRabbit
vfsstorage driver only when other supported options are unavailable.